package hibernateDAOS;
import hibernate.HibernateUtil;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import beans.Plato;
import beans.Producto;

public class ProductoDAO {
	
	private static ProductoDAO instancia = null;
	private static SessionFactory sf = null;
	
	public static ProductoDAO getInstancia(){
		if(instancia == null){
			sf = HibernateUtil.getSessionFactory();
			instancia = new ProductoDAO();
		} 
		return instancia;
	}
	
	public  void guardarProducto(Producto p){
		Session session = sf.openSession();
		session.beginTransaction();
		session.save(p);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	public void eliminarProducto(Producto p){
		Session session = sf.openSession();
		session.beginTransaction();
		session.delete(p);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	public void modificarProducto(Producto p){
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(p);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	@SuppressWarnings("unchecked")
	public List<Producto> obtenerProductos(){
		Session session = sf.openSession();
		Query q = session.createQuery("from Producto");
		List<Producto> productos = q.list();
		session.close();
		return productos;
	}

	public Producto obtenerProducto(int idProducto) {
		Session session = sf.openSession();
		Producto producto = (Producto)session.createQuery("from Producto p where p.idProducto=:idProducto")
				.setParameter("idProducto", idProducto).uniqueResult();
		session.close();
		return producto;
	}

	public Producto obtenerProductoXNombre(String nombreProd)
	{
		Session session = sf.openSession();
		Producto prod = ( Producto )session.createQuery( "from Producto p where p.nombre = :nombreProd").setParameter("nombreProd", nombreProd).uniqueResult();
		session.close();
		return prod;
	}
	
	@SuppressWarnings("unchecked")
	public List<Object[]> obtenerProductosObject(){
		Session session = sf.openSession();
		
		Query q = session.createQuery("from Producto");
		List<Producto> productos = q.list();
		session.close();
		List<Object[]> os = new ArrayList<Object[]>();
		Object[] o ;
		int cant=0;
		for(Producto p : productos){
			o = new Object[productos.size()];
			o[0] = p.getIdProducto();
			o[1] = p.getNombre();
			o[2] = p.getPrecioCompra();
			o[3] = p.getPrecioUso();
			o[4] = p.getUnidadCompra();
			o[5] = p.getUnidadUso();
			os.add(o);
		}
		return os;
	}
	
}




	

